package com.fdb.efp.nls.common.psd;

import org.apache.commons.lang3.StringUtils;

public class PsdTmUtils {
    /**
     * 客户名称脱敏
     * 脱敏规则：王晨=王**  刘昊然=刘**
     * @param cusName 客户名称
     * @return 脱敏后得客户名称
     */
    public static String cusNameTm(String cusName) {
        if (StringUtils.isBlank(cusName)) {
            return cusName;
        }
        return StringUtils.join(StringUtils.left(cusName, 1), "**");
    }

    /**
     * 客户身份证脱敏
     * 脱敏规则：包括前后4位，其余置为*
     *
     * @param certCode 客户身份找
     * @return 脱敏后的身份找
     */
    public static String certCodeTm(String certCode) {
        if (StringUtils.isBlank(certCode)) {
            return certCode;
        }
        if (certCode.length() == 15) {
            return certCode.replaceAll("(\\w{4})\\w*(\\w{4})", "$1*******$2");
        }
        if (certCode.length() == 18) {
            return certCode.replaceAll("(\\w{4})\\w*(\\w{4})", "$1**********$2");
        }
        return certCode;
    }

    /**
     * 客户地址脱敏
     * 脱敏规则：
     * 展示前面二分之一，剩余打码
     *
     * @param addr 客户地址
     * @return 脱敏后的地址
     */
    public static String addrTm(String addr) {
        if (StringUtils.isBlank(addr)) {
            return addr;
        }
        int len = addr.length();
        int keepLen = (int) Math.ceil(len / 2);
        String left = StringUtils.left(addr, keepLen);
        for (int i = 0; i < len - keepLen; i++) {
            left = left.concat("*");
        }
        return left;
    }

    /**
     * 手机号脱敏
     * 脱敏规则：保留前三位、后四位，剩余打码
     * @param mobile 用户手机号
     * @return 脱敏后的用户手机号
     */
    public static String mobileTm(String mobile) {
        if (StringUtils.isBlank(mobile)) {
            return mobile;
        }
        return mobile.replaceAll("(\\w{3})\\w*(\\w{4})", "$1****$2");
    }

    /**
     * 账户脱敏
     * 脱敏规则：保留前四位、后四位，剩余打码
     *
     * @param account 用户卡号
     * @return 脱敏后的用户卡号
     */
    public static String accountTm(String account) {
        if (StringUtils.isBlank(account)) {
            return account;
        }
        int len = account.length();
        String starStr = "";
        for (int i = 0; i < len - 8; i++) {
            starStr = starStr.concat("*");
        }
        return account.replaceAll("(\\w{4})\\w*(\\w{4})", StringUtils.join("$1", starStr, "$2"));
    }

}
